from flask import Flask, jsonify, request

app = Flask(__name__)

# 模拟数据，实际项目中使用数据库里的数据
students = []
next_id = 1


# 路由：获取所有学生信息
@app.route('/students', methods=['GET'])
def get_students():
    global students
    # 返回学生列表的JSON表示
    return jsonify(students)


# 路由：根据ID获取单个学生信息
@app.route('/students/<int:id>', methods=['GET'])
def get_student(id):
    global students
    # 在学生列表中查找指定ID的学生
    student = next((s for s in students if s['id'] == id), None)
    # 如果找到了，返回该学生的JSON表示
    if student:
        return jsonify(student)
    # 如果没有找到，返回404错误和消息
    else:
        return jsonify({'message': '未找到该学生信息'}), 404


# 路由：添加新的学生信息
@app.route('/students', methods=['POST'])
def add_student():
    global students, next_id
    # 从请求中获取JSON数据
    data = request.json
    # 检查数据是否完整
    if not data or 'name' not in data or 'age' not in data or 'gender' not in data:
        return jsonify({'message': '缺少必要的信息'}), 400
    # 创建新的学生字典
    new_student = {
        'id': next_id,
        'name': data['name'],
        'age': data['age'],
        'gender': data['gender']
    }
    # 将新学生添加到列表中，并增加next_id
    students.append(new_student)
    next_id += 1
    # 返回新学生的JSON表示，并设置201状态码（创建成功）
    return jsonify(new_student), 201


# 路由：更新指定ID的学生信息
@app.route('/students/<int:id>', methods=['PUT'])
def update_student(id):
    global students
    # 从请求中获取JSON数据
    data = request.json
    # 检查是否提供了更新数据
    if not data:
        return jsonify({'message': '没有提供更新的信息'}), 400
    # 遍历学生列表，找到指定ID的学生并更新
    for student in students:
        if student['id'] == id:
            student.update(data)
            return jsonify(student)
    # 如果没有找到指定ID的学生，返回404错误和消息
    return jsonify({'message': '未找到该学生信息'}), 404


# 路由：删除指定ID的学生信息
@app.route('/students/<int:id>', methods=['DELETE'])
def delete_student(id):
    global students
    # 在学生列表中查找指定ID的学生
    student = next((s for s in students if s['id'] == id), None)
    # 如果没有找到，返回404错误和消息
    if not student:
        return jsonify({'message': '未找到该学生信息'}), 404
    # 从学生列表中移除指定ID的学生
    students = [s for s in students if s['id'] != id]
    # 返回204状态码（表示删除成功，无内容返回）
    return '', 204


# 程序入口点
if __name__ == '__main__':
    # 以调试模式运行Flask应用
    app.run(host="0.0.0.0",port=8888,debug=True)

